package fun.sanguo.utils.sqlBuilder;

import org.apache.commons.lang3.StringUtils;
import org.apache.ibatis.jdbc.SQL;
import fun.sanguo.model.dto.PageQuery;
import fun.sanguo.model.entity.record.RecordRoleEntity;
import fun.sanguo.model.enums.DelFlagEnums;

/**
 * 记录-角色 sql语句生成类
 *
 * @author ZYP
 * @date 2023-04-25
 */
public class SqlBuilderRecordRole {

    /**
     * 角色表-查询总量
     *
     * @param recordRoleEntity
     * @return
     */
    public String getTotal(RecordRoleEntity recordRoleEntity) {
        return new SQL() {{
            SELECT("COUNT(1)");
            FROM("RECORD_ROLE");
            if (StringUtils.isNotEmpty(recordRoleEntity.getRole())) {
                WHERE("ROLE LIKE '%" + recordRoleEntity.getRole() + "%'");
            }
            // 过滤已删除数据
            WHERE("DEL_FLAG = '" + DelFlagEnums.NORMAL.getCode() + "'");
        }}.toString();
    }

    /**
     * 角色表-查询列表
     *
     * @param recordRoleEntity
     * @param pageQuery
     * @return
     */
    public String getList(RecordRoleEntity recordRoleEntity, PageQuery pageQuery) {
        return new SQL() {{
            SELECT("*");
            FROM("RECORD_ROLE");
            if (StringUtils.isNotEmpty(recordRoleEntity.getRole())) {
                WHERE("ROLE LIKE '%" + recordRoleEntity.getRole() + "%'");
            }
            // 过滤已删除数据
            WHERE("DEL_FLAG = '" + DelFlagEnums.NORMAL.getCode() + "'");
            // 排序
            if (StringUtils.isNotEmpty(pageQuery.getSortField()) && StringUtils.isNotEmpty(pageQuery.getSortOrder())) {
                ORDER_BY(pageQuery.getSortField() + " " + pageQuery.getSortOrder());
            }
            // 分页
            if (pageQuery.getPageNum() > 0 && pageQuery.getPageSize() > 0) {
                LIMIT((pageQuery.getPageNum() - 1) * pageQuery.getPageSize() + ", " + pageQuery.getPageSize());
            }
        }}.toString();
    }

    /**
     * 角色表-新增
     *
     * @param recordRoleEntity
     * @return
     */
    public String insert(RecordRoleEntity recordRoleEntity) {
        return new SQL() {{
            INSERT_INTO("RECORD_ROLE");
            VALUES("role", "#{role}");
            VALUES("description", "#{description}");
            // 通用字段
            VALUES("id", "#{id}");
            VALUES("create_by", "#{createBy}");
            VALUES("create_time", "#{createTime}");
            VALUES("update_by", "#{updateBy}");
            VALUES("update_time", "#{updateTime}");
            VALUES("remark", "#{remark}");
            VALUES("version", "#{version}");
            VALUES("del_flag", DelFlagEnums.NORMAL.getCode());
        }}.toString();
    }

    /**
     * 角色表-编辑
     *
     * @param recordRoleEntity
     * @return
     */
    public String update(RecordRoleEntity recordRoleEntity) {
        return new SQL() {{
            UPDATE("RECORD_ROLE");
            SET("description = #{description}");
            // 通用字段
            SET("update_by = #{updateBy}");
            SET("update_time = #{updateTime}");
            SET("remark = #{remark}");
            // 条件
            WHERE("id = #{id}");
        }}.toString();
    }

    /**
     * 角色表-删除
     *
     * @param recordRoleEntity
     * @return
     */
    public String delete(RecordRoleEntity recordRoleEntity) {
        return new SQL() {{
            UPDATE("RECORD_ROLE");
            // 通用字段
            SET("update_by = #{updateBy}");
            SET("update_time = #{updateTime}");
            SET("del_flag = '" + DelFlagEnums.DELETED.getCode() + "'");
            // 条件
            WHERE("id = #{id}");
        }}.toString();
    }
}
